/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logica.entidades;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.Iterator;


   
/**
 *
 * @author Ana, Danny
 */
public class Minador extends Barco{
    
    //Valores por defecto del barco minador
    private static int DEFAULT_WIDTH = 30;
    private static int DEFAULT_HEIGHT = 30;
    private static int DEFAULT_X = 0;
    private static int DEFAULT_Y = 0;
    private static int ALCANCE_MINA_SUP = 10;
    
    private int minasSuperficie;
    private int minasProfundidad;
    
    private int contadorMinasProf;
    private int contadorMinasSuperf;
    
    private ArrayList<Mina> listaMinasSuperficie;
    private ArrayList<Mina> listaMinasProfundidad;
    
    public Minador()
    {
          listaMinasProfundidad = new ArrayList<Mina>();
          listaMinasSuperficie = new ArrayList<Mina>();
    }
     
    public Minador(int proyectiles, Rectangle bounds, int id, int velocidad, int blindaje, Orientacion orientacion,int minasProf,int minasSuper,Rectangle vision) {
        super(proyectiles, bounds, id, velocidad, blindaje, orientacion,vision);
        this.minasProfundidad = minasProf;
        this.minasSuperficie = minasSuper;
        this.setBounds(bounds);
        this.listaMinasSuperficie = new ArrayList<Mina>();
        this.listaMinasProfundidad = new ArrayList<Mina>();
    }
    public int getMinasSuperficie() {
        return minasSuperficie;
    }

    public void setMinasSuperficie(int minasSuperficie) {
        this.minasSuperficie = minasSuperficie;
    }

    public int getMinasProfundidad() {
        return minasProfundidad;
    }

    public void setMinasProfundidad(int minasProfundidad) {
        this.minasProfundidad = minasProfundidad;
    }    
      
     
    //PRE: Existe al menos una mina de superficie en la lista de minas
    public boolean lanzarMinaSuperficie(){        
        int nuevaCoordX= 0;
        int nuevaCoordY= 0;
        
        boolean tengoMInas = this.tengoMinasSuperficie();
        
        if(tengoMInas)
        {
        this.minasSuperficie--;     
        System.out.println("TOTAL MINAS: " + this.minasSuperficie);
        
        switch(this.getOrientacion()) {
             case NORTE: {
                System.out.println("PARTIDA NORTE");
                nuevaCoordX = (int)this.getCenterX();
                nuevaCoordY = (int)(this.getCenterY() + this.height + ALCANCE_MINA_SUP);
                break; }
            case SUR: {
                System.out.println("PARTIDA SUR");
                nuevaCoordX = (int)this.getCenterX();
                nuevaCoordY = (int)(this.getCenterY() - (this.height + ALCANCE_MINA_SUP));
                break;}
            case OESTE: {
                System.out.println("PARTIDA OESTE");
                nuevaCoordX = (int)(this.getCenterX() + this.height + ALCANCE_MINA_SUP);
                nuevaCoordY = (int)this.getCenterY();
                break; }
            case ESTE: {
                System.out.println("PARTIDA ESTE");
                nuevaCoordX = (int)(this.getX() - (this.height + ALCANCE_MINA_SUP));
                nuevaCoordY = (int)(this.getCenterY() + ALCANCE_MINA_SUP);
                break;}
            case SURESTE: { 
                System.out.println("PARTIDA SURESTE");
                nuevaCoordX = (int)(this.getCenterX() - (this.height + ALCANCE_MINA_SUP));
                nuevaCoordY = (int)(this.getCenterY() - (this.height + ALCANCE_MINA_SUP));
                break;}                         
            case NORESTE: {
                System.out.println("PARTIDA NORESTE");
                nuevaCoordX = (int)(this.getCenterX() - (this.height + ALCANCE_MINA_SUP));
                nuevaCoordY = (int)(this.getCenterY() + (this.height + ALCANCE_MINA_SUP));

                break;}
            case NOROESTE: {
                System.out.println("PARTIDA NOROESTE");
                nuevaCoordX = (int)(this.getCenterX() + this.height + ALCANCE_MINA_SUP);
                nuevaCoordY = (int)(this.getCenterY() + this.height + ALCANCE_MINA_SUP);
                break;}   
            case SUROESTE: {
                System.out.println("PARTIDA SUROESTE");
                nuevaCoordX = (int)(this.getCenterX() + this.height + ALCANCE_MINA_SUP);
                nuevaCoordY = (int)(this.getCenterY() - (this.height + ALCANCE_MINA_SUP));
                break;}                                                                                                                                                                                                                    
        }
        int idMina;
        if(listaMinasSuperficie.isEmpty())
        {
            contadorMinasSuperf = 1;
            idMina = contadorMinasSuperf = 1;
        }
        else
        {
            idMina = contadorMinasSuperf + 1;
        }
        Mina minaSuper = new Mina(idMina,Boolean.TRUE, TipoDeMina.SUPERFICIE,nuevaCoordX,nuevaCoordY);
        listaMinasSuperficie.add(minaSuper);
        }
        
        return tengoMInas;
    }
    
    public boolean lanzarMinaProfundidad(){        
        
        boolean tengoMInas = this.tengoMinasProfundidad();
        
        if(tengoMInas)
        {
            this.minasProfundidad--; 
            int idMina;
            if(listaMinasProfundidad.isEmpty())
            {
                contadorMinasProf = 1;
                idMina = contadorMinasProf = 1;
            }
            else
            {
                idMina = contadorMinasProf + 1;
            }
            Mina minaSuper = new Mina(idMina,Boolean.TRUE, TipoDeMina.PROFUNDIDAD,(int)this.getCenterX(),(int)this.getCenterY());
            listaMinasProfundidad.add(minaSuper);    
        }
        return tengoMInas;
    }
    
    public ArrayList<Mina> GetMinasSuperficie(){
        return this.listaMinasSuperficie;
    }
    
    public ArrayList<Mina> GetMinasProfundidad(){
        return this.listaMinasProfundidad;
    }
     
    
    public boolean tengoMinasSuperficie(){
        return (this.getMinasSuperficie() > 0);
    }
    
    public boolean tengoMinasProfundidad(){
        return (this.getMinasProfundidad() > 0);
    }
    
    public void eliminarMinaProfundidad(Mina minaProf) {
        for (Mina mina : this.listaMinasProfundidad) {
            System.out.println("Mina Antes: " + mina.GetIdMina());
            if(mina.GetIdMina() == minaProf.GetIdMina()){
                System.out.println("Se elimino la mina!!!!!!! ");
                mina.setFueEliminada(true);
                return;
            }
        }
                
    }
    
    public void eliminarMinaSuperficie(Mina minaSup) {
        for (Mina mina : this.listaMinasSuperficie) {
            if(mina.GetIdMina() == minaSup.GetIdMina()){
                System.out.println("Se elimino la mina Superficie!!!!!!! ");
                mina.setFueEliminada(true);
                return;
            }
        }    
    }
}
    
    

    //PRE: Existe al menos una mina de profundidad en la lista de minas
  /*  public void lanzarMinaProfundidad(Coordenada coordenada){
        this.minasProfundidad--;
        // poner mina en el mapa
        //this.setLocation(coordenada.getCordX(), coordenada.getCordY());
}*/

